#!/bin/bash

# 设置项目根目录
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_DIR="$PROJECT_ROOT/logs"
VENV_DIR="$PROJECT_ROOT/venv"

# 颜色输出函数
print_green() {
    echo -e "\033[32m$1\033[0m"
}

print_red() {
    echo -e "\033[31m$1\033[0m"
}

print_yellow() {
    echo -e "\033[33m$1\033[0m"
}

# 检查Python版本
check_python() {
    if ! command -v python3 &> /dev/null; then
        print_red "错误: 未找到 Python3，请先安装 Python3"
        exit 1
    fi
    
    python_version=$(python3 -V 2>&1 | awk '{print $2}')
    print_green "Python 版本: $python_version"
}

# 检查并创建虚拟环境
setup_venv() {
    if [ ! -d "$VENV_DIR" ]; then
        print_yellow "创建虚拟环境..."
        python3 -m venv "$VENV_DIR"
    fi
    
    source "$VENV_DIR/bin/activate"
    print_green "虚拟环境已激活"
}

# 安装依赖
install_requirements() {
    print_yellow "检查并安装依赖..."
    if [ -f "requirements.txt" ]; then
        pip install -r requirements.txt
        print_green "依赖安装完成"
    else
        print_red "错误: 未找到 requirements.txt 文件"
        exit 1
    fi
}

# 检查并创建日志目录
setup_logs() {
    if [ ! -d "$LOG_DIR" ]; then
        print_yellow "创建日志目录..."
        mkdir -p "$LOG_DIR"
    fi
}

# 检查必要的系统依赖
check_system_deps() {
    print_yellow "检查系统依赖..."
    
    # 检查 tesseract-ocr
    if ! command -v tesseract &> /dev/null; then
        print_red "警告: 未找到 tesseract-ocr，OCR功能可能无法使用"
        print_yellow "可以使用以下命令安装:"
        print_yellow "sudo apt install tesseract-ocr tesseract-ocr-chi-sim"
    else
        print_green "tesseract-ocr 已安装"
    fi
}

# 启动应用
start_app() {
    print_yellow "启动应用..."
    
    # 检查是否已有实例在运行
    if [ -f "$PROJECT_ROOT/app.pid" ]; then
        OLD_PID=$(cat "$PROJECT_ROOT/app.pid")
        if ps -p $OLD_PID > /dev/null; then
            print_red "应用已在运行 (PID: $OLD_PID)"
            print_yellow "如需重启，请先运行 ./stop.sh"
            exit 1
        else
            rm "$PROJECT_ROOT/app.pid"
        fi
    fi
    
    # 使用 gunicorn 启动应用
    gunicorn -c app/gunicorn.conf.py app.main:app &
    
    # 保存进程ID
    echo $! > "$PROJECT_ROOT/app.pid"
    print_green "应用已启动 (PID: $!)"
    print_green "API文档地址: http://localhost:8000/api/docs"
}

# 主函数
main() {
    print_green "=== PDF工具箱后端启动脚本 ==="
    
    # 切换到项目根目录
    cd "$PROJECT_ROOT"
    
    # 运行检查
    check_python
    check_system_deps
    setup_venv
    install_requirements
    setup_logs
    
    # 启动应用
    start_app
    
    print_green "=== 启动完成 ==="
}

# 执行主函数
main 